EDK - Timer
-----------

A timer counts clocks in the background. When the clocks have expired, the timer calls the function which has been specified by SetOnFire(). While the timer is counting, it will not consume any time on the host CPU.

Here is an example how a timer can be used in an IO chip:

  class IOChipWithTimer : public Chip {
  private:
    void OnTAUnderflow() {
      // add code to signal underflow on the Int line
      TA.SetTimer(1000);
    }
  protected:
    DoInit() {
      Int.Init("Int", this);
      TA.Init("TA", this);
      TA.SetOnFire((pfn)OnTAUnderflow);
      TA.SetTimer(1000);
    }
  public:
    Line Int;
    Timer TA;
  };

When the emulation starts, it will run for 1000 clock cycles and then call IOChipWithTimer::OnTAUnderflow(). If TA wants to get called in 1000 clock cycles again, OnTAUnderflow() must call TA.SetTimer() at its end.
